Add k9-ecosystem aggregator hub (staged for extraction)#120
Merged
Conversation
Scaffold the standalone k9-ecosystem hub for the K9 self-validating configuration format, staged under k9-ecosystem/ for delivery (intended end-state: its own top-level primary — see k9-ecosystem/BOOTSTRAP.md). The hub owns the canonical spec (spec/SPEC.adoc, v0.1 draft; k9-rs normative until ratified) and a language-agnostic conformance suite (conformance/fixtures/minimal), and aggregates the 11 K9 member repos as git submodules grouped by role: implementations k9-rs, k9_ex, k9_gleam, k9-deno, k9-haskell tooling tree-sitter-k9, vscode-k9, pandoc-k9 ci k9-validate-action, k9-pre-commit examples k9-showcase Members stay standalone (idiomatic to crates.io/Hex/Hackage/JSR and to the tree-sitter/vsce/pre-commit/Actions conventions); the hub provides a single spec source-of-truth, one conformance suite, and one front door. Includes Justfile + scripts/init-submodules.sh for submodule orchestration and .machine_readable/6a2 governance. developer-ecosystem ECOSYSTEM/STATE indexed to reference the staged hub. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019i2e5ABGBKQmMdqk8puFWx
The conformance fixture was a YAML-like sketch (from the k9-rs README)
that lacked the required `K9!` magic line and a `pedigree = { }` block,
so the repo's `Validate K9 contracts` gate (k9-validate-action) errored.
Rewrite it as a valid Nickel K9 contract modelled on the live corpus:
`K9!` magic, SPDX header, five-layer pedigree (Snout/Scent/Leash/Gut/
Muscle) with a `'Kennel` trust level, plus `schema_version` and
`security_level` to clear the validator's warnings. Rename to
component.k9.ncl (it is Nickel), realign expected.json, and rewrite
spec/SPEC.adoc to document the actually-enforced format rather than the
earlier guess.
The PR's other red checks (workflow security linter, trufflehog, deno
@cadre/router duplicate) are pre-existing on main and unrelated to this
diff.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019i2e5ABGBKQmMdqk8puFWx
hyperpolymath
added a commit
that referenced
this pull request
Jun 20, 2026
…ending) (#122) Pre-existing CI failures on `main`, split out of the now-merged k9-ecosystem PR (#120) so that PR stayed focused. None were introduced by #120. **Both now fixed.** ## Fixed here **Secret Scanner / Workflow security linter + trufflehog** — `secret-scanner.yml` had a hand-rolled `trufflehog` job that was both unpinned (`trufflehog@main`) and passed `--fail` on top of the action's own `--fail` (`flag 'fail' cannot be repeated`). The reusable `scan` job (SHA-pinned `hyperpolymath/standards` secret-scanner) already runs trufflehog — the passing `scan / trufflehog` check — so the local job was pure duplication. Removed it. **Language / package anti-pattern** — the root `deno.json` workspace listed `./rescript-ecosystem/cadre-router`, `.../cadre-router/tea-router`, `.../cadre-router/tea-router-pkg`, and `.../cadre-tea-router` as copies of the canonical top-level `./cadre-router` / `./cadre-tea-router`, so two members declared `@cadre/router`. Unlisted the legacy `rescript-ecosystem/cadre-*` entries from the workspace (files retained on disk; top-level dirs are canonical). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019i2e5ABGBKQmMdqk8puFWx --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A decision + scaffold for organising the 11-repo K9 family. After weighing monorepo vs. polyrepo against your existing conventions, this lands on a hub + submodules model: one
k9-ecosystemhub that owns the spec and conformance suite, with the implementations and tooling kept as standalone repos and aggregated as git submodules.The hub is authored as a standalone repo root but staged under
k9-ecosystem/here, because creating a new top-level repo was outside this session's scope. Promotion tohyperpolymath/k9-ecosystemis a one-command extraction — seek9-ecosystem/BOOTSTRAP.md.Why hub + submodules (not a monorepo, not scattered)
Several members cannot be subdirectories without breaking their toolchains:
tree-sitter-k9— the Tree-sitter CLI + bindings expect a repo namedtree-sitter-*at rootk9-validate-action— consumed asowner/repo@ref; Marketplace needs its own repok9-pre-commit— consumers reference the repo URL;.pre-commit-hooks.yamlat rootvscode-k9—vsceper-extension publishing…and the five implementations each publish to a different registry (crates.io / Hex / Hackage / JSR) with independent versioning. A hub still delivers one spec source-of-truth, one conformance suite, and one front door — the same
satellites/+*-ecosystem/submodule pattern this repo already uses.It's a separate primary (not nested) because developer-ecosystem's charter is dev workflow tooling, whereas K9 is a configuration format. Named
k9-ecosystembecausek9-svcalready means the Rust crate lib (k9_svc) and ahyperpolymath/standardsentry.Contents (
k9-ecosystem/)README.adoc,members/README.adoc.gitmodules(11 repos: implementations / tooling / ci / examples)spec/SPEC.adoc(v0.1 draft;k9-rsnormative until ratified),spec/README.adocconformance/README.adoc+fixtures/minimal/{component.k9, expected.json}Justfile,scripts/init-submodules.sh.machine_readable/6a2/{ECOSYSTEM,STATE,META}.a2ml,LICENSE,BOOTSTRAP.mddeveloper-ecosystem's ownECOSYSTEM.a2ml/STATE.a2mlare indexed to reference the staged hub.Status / how to promote
hyperpolymath/k9-ecosystem(BOOTSTRAP.mdoption A), or add that repo to session scope and I'll push it directlyscripts/init-submodules.shto populate the 11 submodules6a2/ECOSYSTEM.a2mlback to the hubSPEC.adocand resolve its[OPEN]items via fixturesValidated locally:
bash -non the script and JSON parse on the fixture both pass. No submodules are actually cloned here (the staged.gitmodulesis inert until extraction), so this PR adds plain files only.🤖 Generated with Claude Code
https://claude.ai/code/session_019i2e5ABGBKQmMdqk8puFWx
Generated by Claude Code